package jvm.stack;

/**
 * @Author: ideaAdmin
 * TODO: 方法中定义的局部变量是否是安全的
 *          如果只有一个线程操作数据 那么这个数据必定是安全的
            如果有多个线程操作数据 那么此数据一定是共享的数据 如果不考虑其本身是否是同步的话  那么存在线程安全问题
 * Date: 2022/2/19:15:04
 * Description:
 */

public class LocalVariableSyn {

    //这里的“sb”是线程安全的 因为在内部定义内部消亡  每个线程栈都有自己的一份
    public static  void m1(){
        //StringBuilder本身是不安全的
        StringBuilder sb = new StringBuilder();
        sb.append("a");
        sb.append("b");
    }

    //不安全 因为这个形参是外部传进来的 如果两个线程共同对这个变量进行修改 是可能出问题的
    public static void m2(StringBuilder sb){
        sb.append("a");
        sb.append("b");
    }

    //不安全 当把这个对象返回之后 存在多线程对其操作不安全问题
    public static StringBuilder m3( ){
        StringBuilder sb = new StringBuilder();
        sb.append("a");
        sb.append("b");
        return sb;
    }
    //sb局部变量是线程安全的 但是返回的String是不安全的
    public static String m4( ){
        StringBuilder sb = new StringBuilder();
        sb.append("a");
        sb.append("b");
        return sb.toString();
    }

}
